var createError = require('http-errors');   //http  错误模块
var express = require('express');   //express模块
var path = require('path');    // Node自带模块
var cookieParser = require('cookie-parser');   //处理cookies的
var logger = require('morgan');   // 记录服务器日志

var session = require('express-session');//记住用户名
var connection = require("./utils/connect");//导入连接数据库
require('./routes/webSocketServer'); //导入聊天室 js文件

// 路由模块
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var commentRouter = require('./routes/comment'); //新增的电影评论路由模块
var vueRouter = require('./routes/vue');  //vue 项目接口  路由

var cors = require('cors');  //解决跨域问题

// var {
//   checkToken
// } = require("./utils");

var app = express();    // app 包含了所有express所有的 api

// app.set()----设置中间件
// view engine setup
app.set('views', path.join(__dirname, 'views'));  //views---为绝对路径
app.set('view engine', 'ejs');  //使用ejs模板引擎

app.use(cors())  //cors设置中间件

// app.use()---调用中间件
app.use(logger('dev'));
app.use(express.json());  //获取表单post 请求提交的参数  
app.use(express.urlencoded({ extended: false }));   // 获取post请求的参数 
app.use(cookieParser());   // 设置服务器cookies的
app.use(express.static(path.join(__dirname, 'public'))); //public---为绝对路径

// 自定义中间件---没有next就一直响应。。
// app.use(function(req,res,next){
//   console.log("一直触发。。。");
//   next();
// });


// session 中间件  必须写在路由中间件前面 
app.use(session({
  name:"AppTest",
  cookie:{maxAge:1000*60*60},  // session 时长
  secret:"test",
  resave:false,
  saveUninitialized:true
}));


// 正确路由地址 == 路由别名 + 路径名   ‘/’ 可以省略
app.use('/', indexRouter);    //路由成功 执行，不会进入下一个中间件
app.use('/users', usersRouter);
app.use('/comment',commentRouter);   //设置中间件

// app.use(checkToken); //token
app.use('/vue',vueRouter);  // vue 项目接口



// next()---进入下一个中间件（路由）
// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
